//+------------------------------------------------------------------+
//|                                                    MoneyNone.mqh |
//|                             Copyright 2000-2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert/ExpertMoney.h>       // 专家顾问资金管理基类

// wizard description start (向导描述，用于MQL5策略向导识别类信息)
//+------------------------------------------------------------------+
//| 类功能描述                                                       |
//| Title=使用最小允许交易量交易                                     |
//| Type=Money                                                       |
//| Name=MinLot                                                      |
//| Class=CMoneyNone                                                 |
//| Page=                                                            |
//+------------------------------------------------------------------+
// wizard description end

//+------------------------------------------------------------------+
//| CMoneyNone 类：无主动资金管理（最小手数交易）实现                  |
//| 核心能力：继承自 CExpertMoney，无复杂资金管理逻辑，始终使用交易品种   |
//|           允许的最小手数开仓，忽略账户资金、风险比例等参数，适合简单测试 |
//| 核心逻辑：无论账户状态、交易方向或市场条件，开仓手数固定为品种最小手数 |
//| 适用场景：1. 策略初期测试（最小成本验证逻辑）；2. 风险极低的小额交易；  |
//|           3. 无需动态调整手数的简单策略（如固定信号开仓，不考虑资金）   |
//+------------------------------------------------------------------+
class CMoneyNone : public CExpertMoney
  {
public:
   //----------------------------------------------------------------
   // 构造与析构函数
   //----------------------------------------------------------------
   /**
    * @brief 构造函数：初始化无资金管理（最小手数）对象
    * @details 继承父类 CExpertMoney 的初始化逻辑，关联账户（m_account）和交易品种（m_symbol）
    */
                     CMoneyNone(void);

   /**
    * @brief 析构函数：清理无资金管理（最小手数）对象
    * @details 依赖父类析构逻辑释放账户、品种等关联资源
    */
                    ~CMoneyNone(void);

   //----------------------------------------------------------------
   // 参数验证：重写父类方法，适配最小手数交易逻辑
   //----------------------------------------------------------------
   /**
    * @brief 验证资金管理设置有效性（无实际验证，仅确保父类参数兼容）
    * @return bool - 验证结果：true=设置有效（强制将风险比例设为100%，跳过父类比例校验），false=无效
    * @note 核心处理：
    *       1. 强制将父类的风险比例（m_percent）设为100%，避免父类因比例异常拦截；
    *       2. 调用父类验证方法，确保账户、品种等基础参数有效；
    *       3. 本类无额外参数，验证逻辑仅为适配框架，不做手数相关校验（手数直接取品种最小值）。
    */
   virtual bool      ValidationSettings(void);

   //----------------------------------------------------------------
   // 开仓手数计算：核心方法，返回品种最小手数（多空一致）
   //----------------------------------------------------------------
   /**
    * @brief 计算多单（买入）开仓手数（固定为品种最小手数）
    * @param price [in] 开仓价格（未使用，本类忽略价格影响）
    * @param sl [in] 止损价格（未使用，本类忽略止损影响）
    * @return double - 多单开仓手数（m_symbol.LotsMin()，品种允许的最小交易量）
    */
   virtual double    CheckOpenLong(double price,double sl);

   /**
    * @brief 计算空单（卖出）开仓手数（固定为品种最小手数）
    * @param price [in] 开仓价格（未使用，本类忽略价格影响）
    * @param sl [in] 止损价格（未使用，本类忽略止损影响）
    * @return double - 空单开仓手数（m_symbol.LotsMin()，品种允许的最小交易量）
    */
   virtual double    CheckOpenShort(double price,double sl);
  };
//+------------------------------------------------------------------+